
import multer from "multer"
import path from "path"
import fs from "fs"
import express from "express"
import { UPLOAD_FILE_PATH,handlerSuccess,handlerError } from "../utils/share.js"
import { ERROR_UPLOAD_01,USER_COMM_UPLOAD} from "../constant/upload.js"
const router = express.Router();
// --------------------------
// 1. 配置 multer（文件保存规则）
function filePath(){
    const  date=new Date(),
        year=date.getFullYear(),
        month=date.getMonth()+1
    const m= month>9?month:'0'+ month
    //
    return [year,month]
}
// --------------------------
const storage = multer.diskStorage({
  // ① 配置文件保存路径（需确保目录存在，否则报错）
  destination: (req, file, cb) => {
    const uploadDir = path.join(UPLOAD_FILE_PATH, filePath().join("/")); // 保存到项目根目录的 uploads 文件夹
  
    // 检查目录是否存在，不存在则创建
    if (!fs.existsSync(uploadDir)) { 
        //recursive 设置为true 表示深度创建
        fs.mkdirSync(uploadDir,{recursive:true})
     }
    cb(null, uploadDir); // 第一个参数为错误信息，null 表示无错误
  },

  // ② 配置文件命名规则（避免文件名重复）
  filename: (req, file, cb) => {
    // 格式：时间戳-原始文件名（例如：1699999999999-avatar.jpg）
    console.log(file.originalname.split(".").at(-1))
    /*
        file {
            fieldname: 'file',
            originalname: 'è¡\x8Cé©¶è¯\x81å\x89¯æ\x9C¬1.png',
            encoding: '7bit',
            mimetype: 'image/png'
        }
    */
    const uniqueName = `${Date.now()}-${(new Date()).getFullYear()}.${file.originalname.split(".").at(-1)}`;
    cb(null, uniqueName);
  }
});

// ③ 创建 multer 实例（传入存储配置）
const upload = multer({ storage: storage });

// --------------------------
// 2. 编写接口（接收文件上传）
// --------------------------
// 单文件上传：upload.single('file') 中的 'file' 对应前端表单的 name 属性
router.post('/', upload.single('file'), (req, res) => {
  try {
    // multer 会自动将文件保存到配置的 destination 目录
    // req.file 包含上传文件的详细信息（路径、大小、类型等）
    const { file }=req.body||{}
    console.log(typeof file)
    if (!req.file) {
      return res.json(handlerError(ERROR_UPLOAD_01,"上传文件不存在"));
    }
    // 响应成功信息（包含文件保存路径）
    res.json(handlerSuccess({
        filename: req.file.filename,
        path: req.file.path.replace(UPLOAD_FILE_PATH,"").replace(/\\/g,"\/"), // 服务器上的绝对路径
        size: req.file.size, // 文件大小（字节）
        mimetype: req.file.mimetype // 文件类型（如 image/jpeg）
    }))
  } catch (err) {
    res.json(handlerError(USER_COMM_UPLOAD,err.message));
  }
});

export default router